#ifndef SCENES_GAMEOBJECT_H
#define SCENES_GAMEOBJECT_H

#include "gdn/GDN.h"
#include "scenes/GameScene.h"
#include "GameApplication.h"

class GameScene;

class GameObject
{
	public:
		GameObject( GameScene& theGame );

		int GetDepth() const;
		void SetDepth( int theDepth );

		gdn::Vector2f GetPosition() const;
		void SetPosition( const gdn::Vector2f& thePos );
		void SetPosition( float theX, float theY );

		float GetGravityStrength() const;
		void SetGravityStrength( float theGravityStrength );

		float GetGravityDirection() const;
		void SetGravityDirection( float theGravityDirection );

		float GetDirection() const;
		void SetDirection( float theDirection );

		float GetSpeed() const;
		void SetSpeed( float theSpeed );

		void StepEvent();
		void StepEvent( const gdn::Event& event );
		virtual void Draw( gdn::Window& window );

	protected:
		GameScene& Game;

		gdn::Sprite sprite;
		int depth;

		float gravityStrength;
		float gravityDirection;

		float direction;
		float speed;

		bool mousePressed;

		virtual void Step();

		virtual void GlobalMousePress( const gdn::Vector2f& clickPos, const gdn::Mouse::Button& clickButton );
		virtual void GlobalMouseRelease( const gdn::Vector2f& clickPos, const gdn::Mouse::Button& clickButton );
		virtual void GlobalMouseMove( const gdn::Vector2f& mousePos );
		virtual void GlobalKeyPress( const gdn::Key::Code key );
		virtual void GlobalKeyRelease( const gdn::Key::Code key );
};

#endif // SCENES_GAMEOBJECT_H
